# 互斥锁
import threading, time

def addNum():
    global num  # 声明后可以修改全局变量值
    lock.acquire()  # 加锁
    num -= 1  # 取完后减一
    lock.release()  # 释放
    print("子线程处理结果:", num)
num = 100
thread_list = []
lock = threading.Lock()  # 生成锁对象
for i in range(100):
    t = threading.Thread(target=addNum)
    t.start()
    # 如果这里直接join会一个一个按顺序执行子线程
    # 因为join之后主程序阻塞,即for循环阻塞直到子线程完成再继续执行
    thread_list.append(t)
for t in thread_list:  # 等待所有子线程执行完毕
    t.join()
print("最终结果:num=%s" % num)

